import { fileURLToPath, URL } from 'node:url'

import  { defineConfig, ConfigEnv, UserConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'

import AutoImport from "unplugin-auto-import/vite";
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import viteCompression from 'vite-plugin-compression'

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }: ConfigEnv): UserConfig => {
  const env = loadEnv(mode,process.cwd()) // 获取.env配置文件
  return {
    plugins: [
      vue(),
      AutoImport({
        // 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
        imports: ["vue"],
        resolvers: [ElementPlusResolver()],
        vueTemplate: true,
        // 配置文件生成位置(false:关闭自动生成)
        // dts: false,
        dts: "src/types/auto-imports.d.ts",
      }),
      // 组件自动导入
      Components({
        resolvers: [ElementPlusResolver()],
        // 配置需要默认导入的自定义组件文件夹，该文件夹下的所有组件都会自动 import (默认:src/components)
        dirs: ["src/components"],
        // 配置文件位置(false:关闭自动生成)
        // dts: false,
        dts: "src/types/components.d.ts",
      }),
      // 代码压缩
      viteCompression({
        verbose: true, // 默认即可
        disable: true, // 是否禁用压缩，默认禁用，true为禁用,false为开启，打开压缩需配置nginx支持
        deleteOriginFile: true, // 删除源文件
        threshold: 10240, // 压缩前最小文件大小
        algorithm: "gzip", // 压缩算法
        ext: ".gz" // 文件类型
      })
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    },
    css: {
      // CSS 预处理器
      preprocessorOptions: {
        scss: {
          javascriptEnabled: true,
          additionalData: `@import "@/assets/variables.scss";`
        }
      }
    },
    server: {
      host: "0.0.0.0", // 允许本机IP访问 0.0.0.0
      port: 1777, // 端口号
      hmr: true, // 热更新
      open: false, // 运行是否自动打开浏览器
      // 代理
      proxy: {
        "/api": {
          target: env.VITE_BASE_URL,
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, '')
        }
      }
    }
  }

})
